package AccesoDatos;

import Entidades.Productos;
import java.util.*;
import java.sql.*;

public class datProductos {

    private static Productos Construir(ResultSet tabla) throws Exception {
        Productos nuevo = new Productos();
        nuevo.setIdArticulo(tabla.getInt("IdArticulo"));
        nuevo.setIdTipoArticulo(tabla.getInt("IdTipoArticulo"));
        nuevo.setNombre(tabla.getString("Nombre"));
        nuevo.setPrecio(tabla.getFloat("Precio"));
        nuevo.setStock(tabla.getInt("Stock"));
        nuevo.setIdUnidadMedida(tabla.getInt("IdUnidadMedida"));
        nuevo.setImagen(tabla.getString("Imagen"));
        nuevo.setdImagen(tabla.getString("DImagen"));
        nuevo.setDescripcion((tabla.getString("Descripcion")));
        nuevo.setGarantia(tabla.getString("Garantia"));
        nuevo.setEstado(tabla.getBoolean("Estado"));
        return nuevo;
    }
    
    public static int InsertarProducto(Productos objProducto) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            PreparedStatement stm = cnn.prepareStatement("INSERT INTO Articulo(IdTipoArticulo, Nombre,  Precio, Stock, Imagen, DImagen, Descripcion, IdMarca, Garantia, IdUnidadMedida) "
                    + "values(?,?,?,?,?,?,?,?,?,4)");
            stm.setInt(1, objProducto.getIdTipoArticulo());
            stm.setString(2, objProducto.getNombre());
            stm.setFloat(3, objProducto.getPrecio());
            stm.setInt(4, objProducto.getStock());
            stm.setString(5, objProducto.getImagen());
            stm.setString(6, objProducto.getdImagen());
            stm.setString(7, objProducto.getDescripcion());            
            stm.setInt(8, objProducto.getIdMarca());
            stm.setString(9, objProducto.getGarantia());
            
            int cont = stm.executeUpdate();
            return cont;

        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }
        
    public static Productos BuscaProducto(int id) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            Productos objeto = new Productos();
            Statement stm = cnn.createStatement();
            ResultSet tabla = stm.executeQuery("Select * from Articulo where IdArticulo=" + id);
            if (tabla.next()) {
                objeto = Construir(tabla);
                return objeto;
            } else {
                return null;
            }
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }

    public static Vector<Productos> ListaProductosActivosxCategoria(int IdCategoria) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            Vector<Productos> lista = new Vector<Productos>();
            Statement stm = cnn.createStatement();
            ResultSet tabla = stm.executeQuery("SELECT * FROM Articulo where IdTipoArticulo=" + IdCategoria + " and Estado='true'");
            while (tabla.next()) {
                lista.add(Construir(tabla));
            }
            return lista;
        } catch (Exception ex) {
            throw ex;
        } finally {
            cnn.close();
        }
    }

    public static Productos BuscaProductoxId(int id) throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            Productos objeto = new Productos();
            Statement stm = cnn.createStatement();
            ResultSet tabla = stm.executeQuery("Select * from Articulo where IdArticulo=" + id + " and Estado = 'True'");
            if (tabla.next()) {
                objeto = Construir(tabla);
                return objeto;
            } else {
                return null;
            }
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }
    }
    
    public static Vector<Productos> ListarProductos() throws Exception {
        Connection cnn = Conexion.getConexion();
        try {
            Vector<Productos> lista = new Vector<Productos>();
            //Statement stm = cnn.createStatement();
            //ResultSet tabla = stm.executeQuery("select * from TipoArticulo order by Descripcion");
            CallableStatement cstm = cnn.prepareCall("exec ListadoProductos");
            ResultSet tabla = cstm.executeQuery();
            while (tabla.next()) {
                lista.add(Construir(tabla));
            }
            return lista;
        } catch (Exception e) {
            throw e;
        } finally {
            cnn.close();
        }

    }
}